var RegExpL = {
    required: /[\S]+/,
    phone: /^1\d{10}$/,
    email: /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,
    url: /(^#)|(^http(s*):\/\/[^\s]+\.[^\s]+)/,
    float: /^(:?(:?\d+.\d+)|(:?\d+))$/,
    date: /^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/,
    identity: /(^\d{15}$)|(^\d{17}(x|X|\d)$)/,
    postalCode: /^[0-9]{6}$/,
    number: /^\d{1,}$/,    /*  /^\+?[1-9][0-9]*$/ 验证非零的正整数  */
    check: {
        is_number: function(value) {
            var patrn = RegExpL.number;
            if (patrn.exec(value) == null || value == "") {
                return false;
            } else {
                return true;
            }
        },
        isDouble : function(value){
            if (value.match(/^(:?(:?\d+.\d+)|(:?\d+))$/)) {
                return true ;
            } else {
                return false;
            }
        }
    },
    // 不校验空
    checkVal : {
        c_url : function (value, item){
            if(value && !RegExpL.url.test(value)){
                return '网址格式不正确，格式如：https://www.***.com';
            }
        },
        c_postalCode : function (value, item){
            if(value && !RegExpL.postalCode.test(value)){
                return '邮政编码格式不正确';
            }
        },
        isCardID : function (value, item){
            if(value){
                return isCardIDCheck(value);
            }
        },
    }
}

function isCardIDCheck(idCardNo){
    var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"};
    var sBirthday="";
    if(idCardNo.length==18){
        var iSum=0 ;
        if(!/^\d{17}(\d|x)$/i.test(idCardNo)) return "您输入的身份证号码错误";
        idCardNo=idCardNo.replace(/x$/i,"a");
        if(aCity[parseInt(idCardNo.substr(0,2))]==null) return "您输入的身份证号码地区错误";
        sBirthday=idCardNo.substr(6,4)+"-"+Number(idCardNo.substr(10,2))+"-"+Number(idCardNo.substr(12,2));
        var d=new Date(sBirthday.replace(/-/g,"/")) ;
        if(sBirthday > new Date()){
            return "您输入的身份证号码上的出生日期错误";  //生日不能大于当前日期
        }else if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate())){
            return "您输入的身份证号码上的出生日期错误";
        }
        for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(idCardNo.charAt(17 - i),11) ;
        if(iSum%11!=1) return "您输入的身份证号码错误";
        //aCity[parseInt(idCardNo.substr(0,2))]+","+sBirthday+","+(idCardNo.substr(16,1)%2?"男":"女")
    }else if(idCardNo.length==15){
        //校验地址码
        if(!/^[1-9]\d{5}$/.test(idCardNo.substr(0,6))) return "您输入的身份证号码地区错误";
        if(aCity[parseInt(idCardNo.substr(0,2))]==null) return "您输入的身份证号码地区错误";
        //校验日期码
        sBirthday="19"+parseInt(idCardNo.substr(6,2))+"-"+Number(idCardNo.substr(8,2))+"-"+Number(idCardNo.substr(10,2));
        var d=new Date(sBirthday.replace(/-/g,"/")) ;
        if(sBirthday > new Date()){
            return "您输入的身份证号码上的出生日期错误";  //生日不能大于当前日期
        }else if(!sBirthday==(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate())){
            return "您输入的身份证号码上的出生日期错误";
        }
        if(!/^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(idCardNo)) {
            return "您输入的身份证号码错误";
        }
    }else{
        return "您输入的身份证号码错误";
    }
}